
/**
 * @file gestiondetypes.h
 * @author Florian Castellane <florian.castellane@grenoble-inp.org>
 * @author Christian Proust <christian.proust@phelma.grenoble-inp.fr>
 * @date Tue Sep 25 23:05:00 2012
 * @brief En-tête des types et des fonctions permettant leur gestion.
 *
 */

#include <stdio.h>
#include <string.h>

#ifndef _GESTIONDETYPES
#define _GESTIONDETYPES

////////////////////////////////////////////
////////////////////////////////////////////
/// STRUCTURES                           ///
////////////////////////////////////////////


typedef enum    /// En cas de modif ici il faut changer aussi source/gestiondetypes.c>char* traduire_type_lexeme(TYPE_DE_LEXEME type_a_traduire)
{
    TYPE_Commentaire,           //  0
    TYPE_Directive,             //  1
    TYPE_Erreur,                //  2
    TYPE_Etiquette,             //  3
    TYPE_Minus,                 //  4
    TYPE_Nouvelle_ligne,        //  5
    TYPE_Operande,              //  6
    TYPE_Operateur,             //  7
    TYPE_Parenthese_droite,     //  8
    TYPE_Parenthese_gauche,     //  9
    TYPE_Plus,                  // 10
    TYPE_Registre,              // 11
    TYPE_Symbole,               // 12
    TYPE_Valeur_decimale,       // 13
    TYPE_Valeur_hexadecimale,   // 14
    TYPE_Valeur_octale,         // 15
    TYPE_Virgule,               // 16
    NOMBRE_TYPES                // 17 types différents
} TYPE_DE_LEXEME;


typedef struct
{
    TYPE_DE_LEXEME type_de_lexeme;
    char* chaine_lexeme;           // a allouer pour stocker une chaîne
} ELEMENT;

struct cellule
{
    ELEMENT element;
    struct cellule * suivant;
} ;

typedef struct cellule * LISTE;


////////////////////////////////////////////
////////////////////////////////////////////
/// FONCTIONS                            ///
////////////////////////////////////////////

LISTE creer_liste(void);
int est_vide(const LISTE L);
LISTE ajout_tete(const ELEMENT elementdelaliste,LISTE tete);
LISTE supprimer_tete(LISTE L);
LISTE ajout_queue(const ELEMENT C,LISTE L);
void visualiser_liste(LISTE liste);
void initialiser(ELEMENT E);
char* traduire_type_lexeme(TYPE_DE_LEXEME type_a_traduire);

#endif  // _GESTIONDETYPES
